package com.ssyt.yt1.day28.communication;

/**
 * 邮箱（缓冲区）
 *
 * @author Hsu.
 * @since 2016年1月4日
 */
public class Postbox {

	private int i;
	private String letter;
	// flag = true： 生产者生产、消费者等待、生产完了唤醒消费者消费，并把flag的标记变量切换为false
	// flag = false：消费者消费 、生产者等待、消费完了唤醒生产者生产，并把flag的标记变量切换为true
	private boolean flag = true;

	public synchronized void push(int i, String letter) {
		// 等待状态
		if (!flag) {
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		// 生产
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		this.i = i;
		this.letter = letter;
		System.out.println("寄信的人（生产者），邮件编号：" + i + "，邮件内容：" + letter);

		// 唤醒消费者消费
		flag = false;
		notify();
	}

	public synchronized void pop() {
		// 等待状态
		if (flag) {
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		// 消费
		System.out.println("送信的人（消费者），邮件编号：" + i + "，邮件内容：" + letter);

		// 唤醒生产者生产者
		flag = true;
		notify();
	}
}
